Contoh Kerosakan pensegmenan

Berikut merupakan contoh kod ANSI C yang sepatutnya menghasilkan kerosakan pensegmenan pada pelantar yang memiliki perlindungan ingatan:

 int main(void) {     char *s = "indahnya dunia";     *s = 'H'; }

Apabila atur cara yang mengandungi kod ini dikompilkan, rentetan "indahnya dunia" diletakkan di dalam seksyen perduaan atur cara terbabit yang ditandakan sebagai baca sahaja; bila dimuat, sistem pengendalian meletakkanya bersama rentetan-rentetan lain dan data pemalar dalam segmen baca-sahaja ingatan. Apabila dilakukan, pemboleh ubah s disetkan untuk menuding kepada tempat rentetan berkenaan, dan satu cubaan dilakukan untuk menulis aksara H melalui pemboleh ubah itu kepada ingatan, lantas menyebabkan kerosakan pensegmenan. Mengkompil atur cara sebegini dengan pengkompil yang tidak memeriksa penugasan ingatan baca-sahaja semasa pengkompilan, dan menjalankannya pada sistem pengendalian ala Unix akan menghasilkan ralat masa jalanan berikut:

$ gcc segfault.c -g -o segfault$ ./segfaultSegmentation fault

Pengesanan balik daripada gdb:

Program received signal SIGSEGV, Segmentation fault.0x1c0005c2 in main () at segfault.c:66               *s = 'H';

Keadaan-keadaan di mana pencabulan pensegmenan berlaku dan bagaimana mereka menunjukkan diri adalah khusus mengikut sistem pengendalian.

Kerana ralat atur-cara yang paling biasa adalah suatu penyahrujukan penuding nol (baca atau tulis menerusi penuding nol, digunakan dalam C untuk membawa maksud "penuding kepada tiada objek" dan sebagai penunjuk ralat), kebanyakan sistem pengendalian memetakan alamat penuding nol supaya mencapainya akan menyebabkan kerosakan pensegmenan.

 int *ptr = NULL; *ptr = 1;

Contoh kod ini mencipta sebuah penuding nol dan cuba untuk menugaskan satu nilai kepada sasarannya yang tidak wujud. Ini menyebabkan kerosakan pensegmenan pada masa jalan pada kebanyakan sistem pengendalian.

Satu lagi cara untuk menghasilkan kerosakan pensegmenan ialah dengan mengulang tanpa kes asas, yang menyebabkan limpah atas tindanan:

 int main(void) {    main(); }